package com.css.sword.knowing.search;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;

import com.css.sword.knowing.search.util.ToJson;

/**
 * 检索结果类：搜索结果 totalNum:符合搜索条件的记录数 num:本次返回的记录数
 * data返回的数据,返回的数据中，除了创建索引时传递进去的原始数据外，还包括key为_id的数据，在索引及索引类型-定的情况下，_id值是唯一的。
 * 
 */
public class SearchResult {
    private long totalNum;
    private long num;
    private long pageNum;
    private long pageSize;
    
	private List<Map> data;
    private String query = "";
    private String errMsg = "";

    /**
     * 获取检索命中的结果集总数
     * 
     * @return 结果集总数
     */
    public long getTotalNum() {
        return totalNum;
    }

    /**
     * 设置检索命中的结果集总数
     * 
     * @param totalNum
     *            结果集总数
     */
    public void setTotalNum(long totalNum) {
        this.totalNum = totalNum;
    }

    /**
     * 获取当前取回结果数目
     * 
     * @return 当前取回的结果数目
     */
    public long getNum() {
        return num;
    }

    /**
     * 设置点钱取回结果数目
     * 
     * @param num
     *            当前取回的结果数目
     */
    public void setNum(long num) {
        this.num = num;
    }

    /**
     * 返回当前页码
     * @return
     */
    public long getPageNum() {
		return pageNum;
	}

	/**
	 * 设置当前的页码
	 * 
	 * @param pageNum
	 */
	public void setPageNum(long pageNum) {
		this.pageNum = pageNum;
	}
	
    /**
     * 获取单页记录数
     * @return
     */
    public long getPageSize() {
		return pageSize;
	}

	/**
	 * 设置单页记录数
	 * @param pageSize
	 */
	public void setPageSize(long pageSize) {
		this.pageSize = pageSize;
	}

	/**
     * 获取返回的文档集合
     * 
     * @return 文档集合
     */
    public List<Map> getData() {
        return data;
    }

    /**
     * 设置返回的文档集合
     * 
     * @param data
     *            文档集合
     */
    public void setData(List<Map> data) {
        this.data = data;
    }
    
    /**
     * 获取检索条件
     * 
     * @return 检索条件的json串
     */
    public String getQuery() {
        return query;
    }
    
    /**
     * 设置获取检索条件
     * 
     * @param data
     *            获取检索条件的json串
     */
    public void setErrMsg(String errMsg) {
        this.errMsg = errMsg;
    }
    
    /**
     * 获取错误信息
     * 
     * @return 错误信息
     */
    public String getErrMsg() {
        return errMsg;
    }
    
    /**
     * 设置获取检索条件
     * 
     * @param data
     *            获取检索条件的json串
     */
    public void setQuery(String query) {
        this.query = query;
    }

    /**
     * 检索结果集转成json字符串格式
     * 
     * @return json字符串
     * @throws IOException 
     */
	public String toJson() throws IOException {
		XContentBuilder jsonBuilder = XContentFactory.jsonBuilder().startObject();
		ToJson.getSearchResultJson(jsonBuilder, this);

		jsonBuilder.endObject();
		return jsonBuilder.string();
	}
}
